-
-
Notifications
You must be signed in to change notification settings - Fork 7.3k
Typescript-Angular: Fix several query parameters serialization issues #21949
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Typescript-Angular: Fix several query parameters serialization issues #21949
Conversation
2804cf9 to
ad80f9f
Compare
|
Please also consider #20998, where query parameters are being serialized to JSON when it is not expected. |
Even without my changes, the following test succeeds Lines 63 to 68 in ca750c0
Could you provide a minimal OpenAPI specification so that I could reproduce it ? |
|
My comment wasn't feedback on your PR, as I haven't tested your implementation, but rather a hint for you to please consider that some folks want the inverse of the issue you're trying to solve (#21934 wants JSON, but doesn't get it, #20998 gets JSON, but doesn't want it). If your implementation already considers this, please disregard my comment :) |
|
Thanks for the clarification and I would be glad to fix another bug. However, your original issue does not contain an OpenAPI specification showing the problem. |
|
You're right, sorry, I thought there was a spec in there 🙈 |
ad80f9f to
b5e40ee
Compare
This notably fixes: - JSON query param serialisation - array serialisation with style=form and explode=true As the class HttpParams from Angular is specially designed for the mimetype: `application/x-www-form-urlencoded` it does not support the range of query parameters defined by the OpenAPI specification. To workaround this issue, this patch introduces a custom `OpenAPIHttpParams` class which supports a wider range of query param styles. Note that as `HttpClient` is used afterwards, the class `OpenApiHttpParams` has a method to convert it into a `HttpParams` from Angular with a no-op HttpParameterCodec to avoid double serialisation of the query parameters.
b5e40ee to
d05d484
Compare
|
Hi, @kzander91 I finally got a bit of time to work on it. I think I have fixed the issue you mentioned in the PR. CC @macjohnny (as I see that you have reviewed Angular PR recently). |
|
@VladimirSvoboda thanks for your contribution. i will try to find some time in the next couple of weeks, its quite a complex PR that requires some time to review it ;-) |
would it make sense to split the two fixes? That would reduce complexity quite a bit and also ensure we don't miss cross-effects. |
|
As it is a reimplementation of the query param handling for the typescript-angular generator, I don't think that it makes sense to split in several PR depending on the issue it fixes. But if you believe it would be better, I can reimplement one of the 2 erroneous behaviour in this PR but this will not significantly reduce its size, or do you have another suggestion? |
The idea was only to reduce the complexity. If splitting it does not reduce then there's no point in doing so. Thanks for giving it thought! |
This notably fixes:
The first commits of the patch introduces integration tests for query
parameters serialization in
samples/client/others/typescript-angular-v20:They should be executed as part of CircleCI.
The last commit fixes the issue.
Fixes are in the following files:
As the class HttpParams from Angular is specially designed for the
mimetype:
application/x-www-form-urlencodedit does not supportthe range of query parameters defined by the OpenAPI specification.
To workaround this issue, this patch introduces a custom
OpenAPIHttpParamsclass which supports a wider range of query paramstyles.
Note that as
HttpClientis used afterwards, the classOpenApiHttpParamshas a method to convert it into aHttpParamsfromAngular with a no-op HttpParameterCodec to avoid double serialization of
the query parameters.
Fixes #21934 and #20998.
PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
fixes #123present in the PR description)@TiFu (2017/07) @taxpon (2017/07) @sebastianhaas (2017/07) @kenisteward (2017/07) @Vrolijkx (2017/09) @macjohnny (2018/01) @topce (2018/10) @akehir (2019/07) @petejohansonxo (2019/11) @amakhrov (2020/02) @davidgamero (2022/03) @mkusaka (2022/04) @joscha (2024/10)